// 发票云对象 1111111111111
const db = uniCloud.database()
const collection = db.collection('invoice')

/**
 * invoice数据表的增删改查云对象
 */
module.exports = {

	/**
	 * 添加发票信息
	 * @param {Object} data - 发票信息
	 * @returns {Object} 添加结果
	 */
	async add(data, uid) {
		// 基本验证
		if (!data.type || ![1, 2].includes(data.type)) {
			throw new Error('请选择正确的发票类型（1:公司，2:个人）')
		}

		if (!data.title) {
			throw new Error('发票抬头不能为空')
		}

		// 公司发票需要验证额外信息
		if (data.type === 1) {
			if (!data.number) {
				throw new Error('纳税人识别号不能为空')
			}
		}

		// 如果设置为默认，需要将其他默认记录改为非默认
		if (data.is_default) {
			await collection
				.where({
					uid: uid,
					is_default: true
				})
				.update({
					is_default: false
				})
		}

		// 补充创建人信息
		data.uid = uid

		// 执行添加操作
		const res = await collection.add(data)

		// 返回添加结果
		return {
			success: true,
			message: '添加成功',
			data: res.id
		}
	},

	/**
	 * 获取发票列表
	 * @param {Object} params - 查询参数
	 * @returns {Object} 发票列表
	 */
	async getList(params = {}, uid) {
		const {
			page = 1, size = 10, type
		} = params

		// 构建查询条件
		let where = {
			uid: uid
		}
		if (type !== undefined) {
			where.type = type
		}

		// 执行查询
		const total = await collection.where(where).count()
		const list = await collection
			.where(where)
			.skip((page - 1) * size)
			.limit(size)
			.orderBy('is_default', 'desc')
			.orderBy('_id', 'desc')
			.get()

		// 返回查询结果
		return {
			success: true,
			data: {
				list: list.data,
				total: total.total,
				page,
				size,
				pages: Math.ceil(total.total / size)
			}
		}
	},

	/**
	 * 获取单个发票详情
	 * @param {String} id - 发票ID
	 * @returns {Object} 发票详情
	 */
	async getDetail(id, uid) {
		if (!id) {
			throw new Error('发票ID不能为空')
		}

		// 查询发票详情
		const res = await collection
			.where({
				_id: id,
				uid: uid
			})
			.get()

		if (res.data.length === 0) {
			throw new Error('发票不存在或已被删除')
		}

		// 返回发票详情
		return {
			success: true,
			data: res.data[0]
		}
	},

	/**
	 * 更新发票信息
	 * @param {String} id - 发票ID
	 * @param {Object} data - 要更新的发票信息
	 * @returns {Object} 更新结果
	 */
	async update(id, data, uid) {
		if (!id) {
			throw new Error('发票ID不能为空')
		}

		// 验证发票是否存在
		const detailRes = await collection
			.where({
				_id: id,
				uid: uid
			})
			.get()

		if (detailRes.data.length === 0) {
			throw new Error('发票不存在或已被删除')
		}

		// 如果更新类型，验证类型是否正确
		if (data.type !== undefined && ![1, 2].includes(data.type)) {
			throw new Error('请选择正确的发票类型（1:公司，2:个人）')
		}

		// 如果更新为公司发票，验证纳税人识别号
		if (data.type === 1 && (!data.number || data.number === '')) {
			throw new Error('纳税人识别号不能为空')
		}
		// let undataInfo = {}
		// if (data.type === 1) { // 单位
		// 	undataInfo.address = data.address; //注册地址
		// 	undataInfo.blank = data.blank; //开户银行
		// 	undataInfo.blank_number = data.blank_number; //
		// 	undataInfo.number = data.number; //纳税人识别号
		// 	undataInfo.tel = data.tel; //注册电话
		// 	undataInfo.title = data.title; //发票抬头
		// 	undataInfo.type = data.type; //类型
		// 	undataInfo.uid = data.uid; //关联用户uid
		// } else if (data.type === 2) {
		// 	undataInfo.title = data.title; //发票抬头
		// 	undataInfo.type = data.type; //类型
		// 	undataInfo.uid = data.uid; //关联用户uid
		// }

		// 如果设置为默认，需要将其他默认记录改为非默认
		if (data.is_default) {
			await collection
				.where({
					uid: uid,
					is_default: true,
					_id: db.command.neq(id)
				})
				.update({
					is_default: false
				})
		}
		if(data._id){
			delete data._id;
		}
		// 执行更新操作
		const res = await collection
			.where({
				_id: id,
				uid: uid
			})
			.update(data)

		// 返回更新结果
		return {
			success: true,
			message: '更新成功',
			data: res.updated
		}
	},

	/**
	 * 删除发票
	 * @param {String} id - 发票ID
	 * @returns {Object} 删除结果
	 */
	async delete(id, uid) {
		if (!id) {
			throw new Error('发票ID不能为空')
		}

		// 验证发票是否存在
		const detailRes = await collection
			.where({
				_id: id,
				uid: uid
			})
			.get()

		if (detailRes.data.length === 0) {
			throw new Error('发票不存在或已被删除')
		}

		// 执行删除操作
		const res = await collection
			.where({
				_id: id,
				uid: uid
			})
			.remove()

		// 返回删除结果
		return {
			success: true,
			message: '删除成功',
			data: res.deleted
		}
	},

	/**
	 * 获取默认发票
	 * @returns {Object} 默认发票信息
	 */
	async getDefault(uid) {
		const res = await collection
			.where({
				uid: uid,
				is_default: true
			})
			.get()

		return {
			success: true,
			data: res.data.length > 0 ? res.data[0] : null
		}
	}
}